2020.6.17 星期三 17:03
基础
可以按需引入,也可以全部引入
改变/自定义 element ui 样式:需要在全局中修改(style标签不加 scoped),比如
.el-carousel__button
, 或者单独引入css文件,即使是在本模块import; 添加className 提高权重,即使!import 也不会生效(如果样式不是全局的话).
$PS:听说可以在style中添加!import, html标签都找不到,往哪个元素上添加.自述比较麻烦
$PS:有的样式好像可以在scoped中修改,比如.el-main
,.el-col-6
,或许因为这些是layout样式?
$TODO: 样式引入方式/权重 分析.1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17/* <!-- <style scoped>: worked --> */
.el-col-6{
padding:0 10px;
}
.el-main{
padding:0;
}
/* <!-- <style scoped>: not work --> */
.self .el-carousel__button{ /* not work */
border-radius:50%;
background:##ff0 ;
}
.el-carousel__button{ /* not work */
border-radius:30%;
background:##f00 ;
}
- 自定义主题。可以在网站设置每个具体组件的大小,样式等;包括主要的颜色主题等。
或者文档其他自定义变量方式等。
还动态切换主题色。
el-form
数据类型:v-model 可以指定数据类型。比如 v-model.number = "numb1"
注意这里为 v-model attribute 添加了 .number。它会告诉 Vue 将其值作为数字来使用。不过这里有一个小小的 bug,那就是当其值为空的时候,它会回到字符串格式,
事件:对于elementUI的input,我们需要在后面加上.native, 因为elementUI对input进行了封装,原生的事件不起作用。
<!–
视图更新:下拉多选 和 时间范围选择 编辑的时候,点击修改视图不会更新 // – 而是修改其他一个东西:比如输入框,单选的时候,多选只更新了最后的操作
下拉多选<el-select v-model="form_base.grades" @change="$forceUpdate()" multiple placeholder="请选择" style="width: 100%">
或者this.subscribeData.splice();
,this.$set()
// 并没有实际,应该是可以的。必forceUpdate 更好一些
时间范围选择@blur="handleTimestamp"
// @change 并没有触发
源码中,为什么是blur才行:date-picker组件内监听picker显示隐藏属性里拉起blur函数,但未拉起change函数。
上面问题的原因是初始化的时候直接赋值this.form_base.grades = []
,没有走vue的数据绑定。
正确的方式this.form_base = { title: '', grades: []}
或者this.$set(this.form_base, 'grades', [])
–>
el-form-item
- 自定义label 标签
<span slot="label">自己写label </span>
表单验证
- el-form validate方法组织程序后续流程
原因:自己写的validate 没有调用callback() - validate() 用asycn/await 拿不到结果。需要在回调中赋值
1
2
3let valid
await this.$refs.r_form_base.validate(r => valid = r)
if(!valid) return this.$message.warning('当前内容设置未完成')
select
后台返回数据为0(为选择),如果options 中没有,会显示没有的id。
解决:可以手动添加一行(for 循环外)为0的情况。<el-option label="请选择" :value="0"></el-option>
同理提交的时候,可以默认值为0,而不是空字符串。 (后端强类型,一定要)
<!–
但是:上面添加的请选择就成为了一个选项 出现在了 下拉选择列表中了。
并不想要,只好再改回去。手动修改数据了。
也不能把‘请选择’ 换为‘全部’。因为这里就是 请选择。
最后,筛选区可以把placeholder 改成 ‘全部’。
提交的时候也可以是0(需要和后端统一)
–>
tree
手动展开/收起 全部。
:default-expand-all="treeExpand"
只能设置默认状态。1
2
3
4
5
6
7
8
9
10expandAll(bool) {
var nodes = this.$refs.ProjectTree.store.nodesMap;
for (var i in nodes) {
nodes[i].expanded = bool;
}
// 或者
for(var i=0;i<this.$refs.tree.store._getAllNodes().length;i++){
this.$refs.tree.store._getAllNodes()[i].expanded=this.isexpand;
}
}props:curr-course-id 变化并不会引起css高亮。 #/17246
需要监听变化,然后调用api:setCurrentKey。或者1
2
3this.$refs.tree.store.nodesMap[oldValue].isCurrent = false;
this.$refs.tree.store.nodesMap[value].isCurrent = true;
`取消高亮的时候,不能通过设置currentKey,需要先获取currKey,调用上面的api修改tree.store
1
2
3
4
5// this.currCourseId = '';
// this.$refs.courseTree.$refs.tree.setCurrentKey('');
// 高亮并不会被取消,需要如下调用
const currKey = this.$refs.courseTree.$refs.tree.getCurrentKey();
this.$refs.courseTree.$refs.tree.store.nodesMap[currKey].isCurrent = false;树 会把叶子节点也展示出来,也就是说不是一个文件夹结构,文件也会出现在层级。
如果业务只需要展示文件夹目录,而且前面的小三角icon 也不需要显示。
两种方式:1)重新格式化(后端)返回的数据结构;2)调用 tree的相关api 进行数据和ui 的展示。- 如果数据源发生变化,要调用filter方法,需要在nextTick 中。
1 | <div class="sidebar-course"> |
1 | <!-- |
datePicker
- 如果是时间范围选择器 清空情况的时候会把数据改为null. 导致解构赋值的时候报错
[start, end] = timeRange
<!– - 下面是无用的。其实value-format 是可以实现的
<!–
不能设置value-format,使用默认。
使用format指定输入框的格式;使用value-format指定绑定值的格式。